package de.fhffm.gui;

import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import de.fhffm.tables.Mitarbeiter;

public class LoginFenster implements ActionListener {
 
	private JButton btnAnmelden = new JButton("Anmelden");
	private JButton btnAbbrechen = new JButton("Abbrechen");
	
	private JTextField textFeldBenutzer = new JTextField(8);
	private JTextField textFeldPasswort = new JTextField(8);
	
	 
	private JLabel labelUeberschrift = new JLabel ("Chili-Datenbank");
	private JLabel labelBenutzer = new JLabel("Benutzername:");
	private JLabel labelPasswort = new JLabel("Passwort:");
	
	private JFrame loginFenster = new JFrame();
	
	private String benutzername = null;
	private String passwort = null;
	
	
	
	public LoginFenster(){
	
		setzeFensterEigenschaften();
		setzeHauptPanel();
		setzeBenutzerPanels();
		setzeButtons();
		
		
	}
	
	private void setzeFensterEigenschaften(){
		
		loginFenster.setTitle("Login");	
		loginFenster.setSize(350,450);
		loginFenster.setLocationRelativeTo(null);
		loginFenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		loginFenster.setVisible(true);
		loginFenster.setResizable(true);
		
	}
	
	private void setzeHauptPanel(){
		
		JPanel hauptPanel = new JPanel();
		labelUeberschrift.setFont(new Font("Kristen ITC", Font.BOLD,30));
		loginFenster.getContentPane().setLayout(new GridLayout(4,0));
		loginFenster.getContentPane().add(hauptPanel);
		hauptPanel.add(labelUeberschrift);
		
	}
	
	private void setzeBenutzerPanels(){
		
		JPanel benutzerPanel = new JPanel(new FlowLayout());
		JPanel passwortPanel = new JPanel(new FlowLayout());
		
		labelBenutzer.setFont(new Font("Arial", Font.BOLD,20));
		labelPasswort.setFont(new Font("Arial", Font.BOLD,20));
		
		
		benutzerPanel.add(labelBenutzer);
		benutzerPanel.add(textFeldBenutzer);
		textFeldBenutzer.setFont(new Font("Arial", Font.BOLD,15));
		
		passwortPanel.add(labelPasswort);
		passwortPanel.add(textFeldPasswort);
		textFeldPasswort.setFont(new Font("Arial", Font.BOLD,15));
		
		loginFenster.getContentPane().add(benutzerPanel);
		loginFenster.getContentPane().add(passwortPanel);
	}

	
	private void setzeButtons(){
		
		JPanel buttonPanel = new JPanel();
		
		buttonPanel.add(btnAnmelden);
		buttonPanel.add(btnAbbrechen);
		
		btnAnmelden.addActionListener(this);
		btnAbbrechen.addActionListener(this);
		
		btnAnmelden.setFont(new Font("Arial", Font.BOLD,15));
		btnAbbrechen.setFont(new Font("Arial", Font.BOLD,15));
		
		loginFenster.add(buttonPanel);
	}
	
	public static void main(String[] args) {
		
		new LoginFenster();
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		Object obj = e.getSource();
		
		if(obj == btnAnmelden){
			boolean b = ueberpruefeEingabe();
			if(b == true){
				//starte Hauptfenster
			}
			
		}
		if(obj == btnAbbrechen){
			loginFenster.dispose();
			System.exit(0);
		}
		
	}

	private boolean ueberpruefeEingabe() {
		hohleEingabe();
		boolean bo = false;
		try{
			bo = pruefe();
		}catch (InputException e){
			System.out.println("Eingabe Fehlt!");
		}
		
		return bo;
		
	}

	private void hohleEingabe() {
		
		this.benutzername = textFeldBenutzer.getText();
		this.passwort = textFeldPasswort.getText();
		
	}

	private boolean pruefe() throws InputException{
		
		boolean check = false;
		if(benutzername.isEmpty()){
			throw new InputException("Bitte Benutzernamen eingeben!");
		}else if(passwort.isEmpty()){
			throw new InputException("Bitte Passwort eingeben!");
		}else if((check = ueberpruefeBenutzer()) == false){
			throw new InputException("Passwort oder Benutzername Falsch!");
		}else {
			return true;
		}
	}

	private boolean ueberpruefeBenutzer(){
		
		EntityManagerFactory factory;
		factory = Persistence.createEntityManagerFactory("test");
		EntityManager em = factory.createEntityManager();
		
		Query q = em.createNativeQuery("select benutzername from MITARBEITER where benutzername ='"+benutzername+"' and passwort='"+passwort+"';");
		List result = q.getResultList();
		
		if(result.isEmpty()){
			System.out.println("Passwort oder Benutzername Falsch!");
			result.clear();
			return false;
		}else{
			System.out.println("Eingeloggt als: "+result.get(0));
			result.clear();
			return true;
		}
		

	}
}
